--- id: TASK-007 title: 'TUI reading queue: Goodlinks unread list' status: To Do assignee: [] created_date: '2026-06-11 02:50' labels: - feature dependencies: [] priority: medium ordinal: 7000 --- ## Description New page in tui/dashboard.py showing unread articles from Goodlinks, read directly from its local SQLite database. DB path: ~/Library/Group Containers/group.com.ngocluu.goodlinks/Data/data.sqlite Table: link Unread query: SELECT title, url, author, summary, tags, addedAt FROM link WHERE readAt = 0 AND deletedAt = 0 ORDER BY addedAt DESC LIMIT 50 Use Python's built-in sqlite3 module — no subprocess, no httpx. Query in a thread worker (DB is on local disk, fast). Display as scrollable list: title (bold), author/domain (dim), tags (accent), added date Summary shown as secondary line (truncated to 1 line) Keybindings: Enter = open URL in browser (subprocess 'open ') m = mark read (UPDATE link SET readAt = unixepoch() WHERE id = ?) r = refresh list Caveat: Goodlinks DB may be locked briefly when the app is writing. Use sqlite3 in read-only URI mode: sqlite3.connect('file:///path?mode=ro', uri=True) to avoid contention.